package com.yan.utils;

import com.alibaba.fastjson.JSON;

import java.io.File;

/**
 * new File("..\path\abc.txt") 中的三个方法获取路径的方法 1： getPath() 获取相对路径，例如
 * ..\path\abc.txt 2： getAbslutlyPath() 获取绝对路径，但可能包含 ".." 或 "." 字符，例如
 * D:\otherPath\..\path\abc.txt 3： getCanonicalPath() 获取绝对路径，但不包含 ".." 或 "."
 * 字符，例如 D:\path\abc.txt
 */
public class PathUtil {

    private static String webRootPath;
    private static String rootClassPath;

    public static String getPath(Class<?> clazz) {
        String path = clazz.getResource("").getPath();
        return new File(path).getAbsolutePath();
    }

    public static String getPath(Object object) {
        String path = object.getClass().getResource("").getPath();
        return new File(path).getAbsolutePath();
    }

    // 注意：命令行返回的是命令行所在的当前路径
    public static String getRootClassPath() {
        if (rootClassPath == null) {
            try {
                String path = PathUtil.class.getClassLoader().getResource("").toURI().getPath();
                rootClassPath = new File(path).getAbsolutePath();
            } catch (Exception e) {
                String path = PathUtil.class.getClassLoader().getResource("").getPath();
                rootClassPath = new File(path).getAbsolutePath();
            }
        }
        return rootClassPath;
    }

    public static void setRootClassPath(String rootClassPath) {
        PathUtil.rootClassPath = rootClassPath;
    }

    public static String getPackagePath(Object object) {
        Package p = object.getClass().getPackage();
        return p != null ? p.getName().replaceAll("\\.", "/") : "";
    }

    public static String getWebRootPath() {
        if (webRootPath == null) {
            webRootPath = detectWebRootPath();
        }
        return webRootPath;
    }

    public static void setWebRootPath(String webRootPath) {
        if (webRootPath == null) {
            return;
        }

        if (webRootPath.endsWith(File.separator)) {
            webRootPath = webRootPath.substring(0, webRootPath.length() - 1);
        }
        PathUtil.webRootPath = webRootPath;
    }

    // 注意：命令行返回的是命令行所在路径的上层的上层路径
    private static String detectWebRootPath() {
        try {
            String path = PathUtil.class.getResource("/").toURI().getPath();
            return new File(path).getParentFile().getParentFile().getCanonicalPath();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static boolean isAbsolutelyPath(String path) {
        return path.startsWith("/") || path.indexOf(":") == 1;
    }


    public static void t() {
        try {


            int i = 1 / 0;

        } catch (Exception e) {

            try {


                int i = 1 / 0;

            } catch (Exception e1) {
                System.out.println(e1);
            }
        }
    }


    String str = new String("good");
    char[] ch = {'a', 'b', 'c'};
    int i = 100;

    public void change(String str, char ch[], int i) {
        str = "test ok";
        this.i = 40;
        ch[0] = 'g';

    }

    public static void main(String args[]) {
        try {

            System.out.println("class path:" + getPath(PathUtil.class));
            System.out.println("PackagePath:" + PathUtil.getPackagePath(PathUtil.class));
            System.out.println("RootClassPath:" + PathUtil.getRootClassPath());
            System.out.println("WebRootPath:" + PathUtil.getWebRootPath());
            System.out.println("detectWebRootPath:" + PathUtil.detectWebRootPath());

            String str = "yan";
            String s = JSON.toJSON(str).toString();
            System.out.println(s);

        } catch (Exception e) {
            throw new RuntimeException(e);
        }


        t();

        System.out.println("===================");

        PathUtil ex = new PathUtil();
        ex.change(ex.str, ex.ch, ex.i);
        System.out.print(ex.str + " and " + "   " + ex.i + "  and  ");
        System.out.println(ex.ch);

        System.out.println("yan".hashCode() % 2);
        System.out.println("yanl".hashCode() % 2);

    }

}
